package com.cdsxt.util;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

/**
 * 
 * @author 成都尚学堂 & mr zeng
 * 客服热线：028-65176856
 * 网址： www.cd-sxt.com
 * 
 * jsonObj类似于map-不需要类型转换！！！
 */
public class JsonObj {

	
	private Map<String, ?> target;
	
	private JsonObj(Map<String, ?> target) {
		super();
		this.target = target;
	}

	/**
	 * 获取json对象的key的val（真实的数据）
	 * {
	 * key:val
	 * }
	 */
	public  <ValType> ValType getRealVal(String key){
		Object val = this.target.get(key);
		//
		return (ValType) val;
	}
	/**
	 * 获取json对象的key的val（自动转型）
	 * {
	 * key:val
	 * }
	 */
	public  <ValType> ValType getAutoConvertTypeVal(String key){
		Object val = this.target.get(key);
		/**
		 * val：是Map=转换为jsonObj
		 * val：是List map=转换为list jsonObj
		 * val：是其他类型==直接返回
		 */
		if (val instanceof Map) {
			Map<String, ?> map=(Map<String, ?>) val;
			return (ValType) JsonObj.newJsonObj(map);
		}
		if (val instanceof List) {
			List list= (List) val;
			//如果list元素是map
			if(list.size()!=0&&list.get(0) instanceof  Map){
				List<Map<String, ?>> listTarget=(List<Map<String, ?>>) val;
				return (ValType) JsonObj.newListJsonObj(listTarget);
			}
			
		}
		//其他类型直接返回
		return (ValType) val;
	}
	/**
	 * 获取json对象的key的val是map
	 * {
	 * key:val
	 * }
	 */
	public  JsonObj getJsonObjVal(String key){
		Object val = this.target.get(key);
		Map<String, ?> map=(Map<String, ?>) val;
		return JsonObj.newJsonObj(map);
	}
	
	
	/**
	 * 转换jsonObj
	 */
	public static JsonObj newJsonObj(Map<String, ?> target){
		return new JsonObj(target);
	}
	/**
	 * 转换list jsonObj
	 */
	public static List<JsonObj> newListJsonObj(List<Map<String, ?>> listTarget){
		List<JsonObj> list=new ArrayList<JsonObj>();
		for (Map<String, ?> target : listTarget) {
			JsonObj jsonObj=new JsonObj(target);
			list.add(jsonObj);
		}
		return list;
	}

	String name1;
	String name2;

	@Override
	public String toString() {
		
		StringBuilder sb=new StringBuilder("xxx");
		
		sb.append("xxx,");
		
		return sb.toString();
	}
	
	
	
	
	
}
